<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 点击按钮弹出警告：你别点我 -->
    <input type="button" value="点击" onclick="(function(){alert('你别点我');})()">

<script>
    //函数表达式:把函数当做一个值赋给变量。
    //注意：函数表达式必须先声明，再调用。
    let f1 =function fun(){
        console.log('hello f1');
    };
    //函数调用：变量名（）调用。
    f1();
    let f2 =function fun2(name){
        console.log('hello'+name);
    };
    f2('张三');
    //匿名函数：函数没有名字。
    let f3 = function(a,b){
        return a<b?a:b;
    };
    console.log(f3(9,6));
    //立即执行函数：匿名函数自调用。用（）括起来的部分是一个整体。
    (function(a,b){
        console.log(a+b);
    })(1,2);

    let a = function(){
        console.log(1);
    };
    console.log(typeof a);   //函数数据类型：属于object，和数组一样。
    //把函数这个值作为实参传给另一个函数
    //回调函数：把函数A当作参数传给函数B，在函数B中调用函数A，此时函数A叫做回调函数。
    console.log('---------');
    let myf1 = function(a){
       a(); //myf2();
    };
    let myf2 = function(){
        console.log('myf2');
    };
    myf1(myf2);
    //递归函数：在函数中调用自己。
    //阶乘：10！=10*9*8*7*6*5*4*3*2*1   >10*(9!)  >10*9*(8!)\
    let jc = function(n){
        if(n===1){
            return 1;
        }else{
            return n*jc(n-1);
        }
    }
    console.log(jc(10));




    console.log('---------');
    function test(a,b){
        let nc = a+b;
    }
    function text2(){
        return 0;
    }
    console.log(test());
    console.log(text2());
</script>   
</body>
</html>